﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TCC_Hotel.Entidades.Basicas;
using System.Data;
using System.Xml.Linq;

namespace TCC_Hotel.Serviços
{
    public class WebServices
    {
        /// <summary>
        /// Busca no site da republica virtual informações do endereço
        /// </summary>
        /// <param name="CEP"> CEP que deseja fazer a pesquisa</param>
        /// <returns>Endereco correspondente</returns>
        public Endereco GetEnderecoPorCEP(string CEP)
        {            
            string url = "http://republicavirtual.com.br/web_cep.php?cep={0}&formato=xml";
            CEP = CEP.Replace("-", "").Trim();
            CEP = CEP.Replace(".", "");

            Endereco retorno = new Endereco();

            try
            {
                CEP = string.Format(url, CEP);
                XElement objXElement = new XElement("root");
                objXElement.Add(XElement.Load(CEP));

                var dadosCEP = (from d in objXElement.Elements("webservicecep")
                                select new
                                {
                                    Resultado = d.Element("resultado").Value.ToString(),                                    
                                    UF = d.Element("uf").Value.ToString(),
                                    Cidade = d.Element("cidade").Value.ToString(),
                                    Bairro = d.Element("bairro").Value.ToString(),
                                    TipoLogradouro = d.Element("tipo_logradouro").Value.ToString(),
                                    Logradouro = d.Element("logradouro").Value.ToString()
                                }).Single();               

                Estado estado = new Estado() 
                { 
                    sigla = dadosCEP.UF
                };
                
                 //preenche entidade de retorno
                retorno = new Endereco()
                {
                    Bairro = dadosCEP.Bairro,
                    Logradouro =  dadosCEP.TipoLogradouro + " " + dadosCEP.Logradouro,
                    Cidade = dadosCEP.Cidade,
                    Estado = estado
                };

                if (dadosCEP.Resultado == "0")
                {
                    retorno.Logradouro = "Endereço não encontrado!";
                }
                
            }

            //falha de conexao
            catch (Exception ex)
            {
                Estado estado = new Estado()
                {
                    sigla = "SP"
                };

                //preenche entidade de retorno
                retorno = new Endereco()
                {
                    Bairro = "",
                    Logradouro = "Endereço não encontrado!",
                    Cidade = "",
                    Estado = estado
                };
                
            }

           return retorno;
         }   
            
      }
}